package com.heima.user.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.model.user.dtos.LoginDto;
import com.heima.model.user.pojos.ApUser;
import com.heima.model.user.vo.ApUserVo;
import com.heima.user.mapper.AppUserMapper;
import com.heima.user.service.AppUserService;
import com.heima.utils.common.AppJwtUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;

@Service
public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, ApUser> implements AppUserService {
    @Override
    public ApUserVo login(LoginDto dto) {
        //0. 判断dto成员变量是不是空,区分是游客登录还是用户登录,游客登录制作Token
        if (StrUtil.isBlank(dto.getPhone()) || StrUtil.isBlank(dto.getPassword())){
            // 游客登录: 用id为0制作令牌
            String token = AppJwtUtil.getToken(0L);
            ApUserVo userVo = new ApUserVo();
            userVo.setToken(token);
            return userVo;
        }
        //1. 根据用户手机号查询数据库是否存在,不存在返回空
        ApUser user = lambdaQuery().eq(ApUser::getPhone, dto.getPhone()).one();
        if (user == null){
            return null;
        }
        //2. 如果手机号存在就验证密码是否正确(加盐加密去查),不一致返回空
        String pwd = DigestUtils.md5DigestAsHex((dto.getPassword()+user.getSalt()).getBytes(StandardCharsets.UTF_8));
        if(!user.getPassword().equals(pwd)){
            return null;
        }
        //3. 如果密码正确制作Token,返回包含对应信息的userVo
        String token = AppJwtUtil.getToken((long)user.getId());
        ApUserVo userVo = BeanUtil.toBean(user, ApUserVo.class);
        userVo.setToken(token);
        return userVo;
    }
}
